SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROC [dbo].[SP_TXMVTO_CNTB_I39]
/*-------------------------------------------------------------------*/
/*----- Empresa           : OFISIS S.A.                          ----*/
/*----- Cliente           : OFISIS S.A.                          ----*/
/*----- Sistema           : Contabilidad                         ----*/
/*----- Modulo            : Empresa                              ----*/
/*----- Programa          : Ajuste por redondeo                  ----*/
/*----- Nombre            : SP_TXMVTO_CNTB_I39                   ----*/
/*----- Script            : TXMVTO_CNTB                          ----*/
/*----- Desarrollado por  : Franco Gamboni Koifman               ----*/
/*----- Fecha             : 23/06/1997                           ----*/
/*----- Base de Datos     : MS SQL Server                        ----*/
/*----- Version BD        : 6.5                                  ----*/
/*-------------------------------------------------------------------*/
/*----  MODIF POR : PERCY GARCIA           -----*/
/*----  FECHA MODIF : 24/12/2008          -----*/
/*----  DETALLE MODIF : SE AUMENTO EL CAMPO ACTIVIDAD EN EL INSERT EN CASO LAS CUENTAS DE GANANCIA/PERDIDA LLEVEN ACTIVIDAD          -----*/
/*-------------------------------------------------------------------*/
/*----- Detalle		  : Redondeo para numero de Proceso      ----*/
/*----- Drop proc SP_TXMVTO_CNTB_I39                             ----*/
/*----- Grant all on SP_TXMVTO_CNTB_I39 to PUBLIC                ----*/
/*----- SP_TXMVTO_CNTB_I39                                       ----*/
/*-------------------------------------------------------------------*/

@ISCO_EMPR	TD_VC_002,
@ISCO_USUA      TD_VC_008, 
@IDFE_USUA      TD_DT_001,
@INNU_CNTB_EMPR TD_IN_001_CONT,
@ISCO_UNID_CNTB TD_VC_003,
@INNU_ANNO	TD_IN_004_ANNO,
@INNU_MESE	TD_IN_002_MESE,
@INNU_FACT	TD_NU_009_004,
@INNU_PROC	TD_IN_001

as
Begin Transaction SP_TXMVTO_CNTB_I39
Declare 
@CSCO_UNID_CNTB TD_VC_003,
@CSCO_OPRC_CNTB TD_VC_003,
@VSCO_MONE_CNTB	TD_VC_003,
@CSNU_ASTO      TD_VC_010,
@CNIM_DEBE	TD_NU_016_004, 
@CNIM_HABE	TD_NU_016_004,
@VDFE_ASTO_CNTB TD_DT_001,
@VNNU_SECU	TD_IN_002,
@VSID_GANA_REDO TD_VC_003,
@VSID_PERD_REDO TD_VC_003,
@VSCO_CNTA_GANA	TD_VC_020_CNTA,
@VSCO_CNTA_PERD	TD_VC_020_CNTA,
@VNTO_SALD	TD_NU_016_004,
@CDFE_DOCU_VENC	TD_DT_001,
@VNFA_CAMB_DIAR	TD_NU_015_006,
@CDFE_DOCU_REFE	TD_DT_001,
@CNNU_PROC	TD_IN_001,
@CNNU_PROC_SECU	TD_IN_001,
@VSST_CNTA_NATU TD_VC_003,
@CSSI_MVTO_CNTB TD_VC_003,
@VSST_AUXI_EMPR TD_VC_001,
@VSTI_AUXI_REGA TD_VC_001,
@VSCO_AUXI_REGA TD_VC_020,
@VSTI_AUXI_REPE TD_VC_001,
@VSCO_AUXI_REPE TD_VC_020,      
@VSST_ORDE_SERV TD_VC_001,      
@VSCO_ORDE_REGA TD_VC_020,     
@VSCO_ORDE_REPE TD_VC_020 

/* Selecciona lAs cuenta de Ganacia y Perdida */

--- Inicializar-------------
  Select @VSTI_AUXI_REGA = Null
  Select @VSCO_AUXI_REGA = Null
  Select @VSTI_AUXI_REPE = Null
  Select @VSCO_AUXI_REPE = Null

Select 	@VSCO_MONE_CNTB = CO_MONE,
	@VSID_GANA_REDO = ID_GANA_REDO,
	@VSID_PERD_REDO = ID_PERD_REDO 
From	TTCNTB_EMPR
Where	CO_EMPR = @ISCO_EMPR 
and     NU_CNTB_EMPR = @INNU_CNTB_EMPR

Select @VSST_AUXI_EMPR = 'N'
Select @VSST_ORDE_SERV = 'N' 

Select @VSCO_CNTA_GANA = t1.CO_CNTA_EMPR,
       @VSST_AUXI_EMPR = t2.ST_AUXI_EMPR, 
@VSST_ORDE_SERV = t2.ST_ORDE_SERV
From TTIDEN_CNTA t1, TMPLAN_ANNO t2
Where 	t1.CO_EMPR = @ISCO_EMPR 
And     t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And     t1.ID_CNTA = @VSID_GANA_REDO
And     t2.CO_EMPR = t1.CO_EMPR
And     t2.CO_CNTA_EMPR = t1.CO_CNTA_EMPR

If @VSST_AUXI_EMPR = 'S'
Begin
  Select @VSTI_AUXI_REGA = TI_AUXI_REGA,
         @VSCO_AUXI_REGA = CO_AUXI_REGA
  From   TMPARA_CONT
  Where  CO_EMPR = @ISCO_EMPR 
End

If @VSST_ORDE_SERV = 'S'      
Begin      
  Select @VSCO_ORDE_REGA = NullIf(Rtrim(CO_ORDE_REGA),'')  
  From   TMPARA_CONT     
  Where  CO_EMPR = @ISCO_EMPR       
End 

Select @VSST_AUXI_EMPR = 'N'
Select @VSST_ORDE_SERV = 'N'  

Select @VSCO_CNTA_PERD = t1.CO_CNTA_EMPR ,
       @VSST_AUXI_EMPR = t2.ST_AUXI_EMPR, 
@VSST_ORDE_SERV = t2.ST_ORDE_SERV
From TTIDEN_CNTA t1, TMPLAN_ANNO t2
Where 	t1.CO_EMPR = @ISCO_EMPR 
And     t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR 
And     t1.ID_CNTA = @VSID_PERD_REDO
And     t2.CO_EMPR = t1.CO_EMPR
And     t2.CO_CNTA_EMPR = t1.CO_CNTA_EMPR

If @VSST_AUXI_EMPR = 'S'
Begin
  Select @VSTI_AUXI_REPE = TI_AUXI_REPE,
         @VSCO_AUXI_REPE = CO_AUXI_REPE
  From   TMPARA_CONT
  Where  CO_EMPR = @ISCO_EMPR 
End

If @VSST_ORDE_SERV = 'S'      
Begin      
  Select @VSCO_ORDE_REPE = NullIf(Rtrim(CO_ORDE_REPE),'')  
  From   TMPARA_CONT     
  Where  CO_EMPR = @ISCO_EMPR       
End  

Declare CU_TXMVTO_CNTB_I04_1 Cursor
For
Select t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO, 
	DEBE  = Isnull(SUM( ROUND(((ASCII(t1.TI_OPER)/67)*Isnull(t1.IM_MVTO_CNTB, 0)),2) ), 0), 	HABER = Isnull(SUM( ROUND(((65/ASCII(t1.TI_OPER))*Isnull(t1.IM_MVTO_CNTB, 0)),2) ), 0),
       MAX(t1.SI_MVTO_CNTB)
From   TXMVTO_CNTB t1, TMOPRC_CNTB t2
Where  t1.CO_EMPR = @ISCO_EMPR 	
And      t1.NU_CNTB_EMPR = @INNU_CNTB_EMPR
And      t1.CO_UNID_CNTB = @ISCO_UNID_CNTB
And      t1.NU_ANNO = @INNU_ANNO 	
And      t1.NU_MESE = @INNU_MESE 
And      t1.SI_MVTO_CNTB in ( 'APR', 'DIG' )
And	 t1.NU_PROC = @INNU_PROC		-- nuevo
And      t1.CO_EMPR = t2.CO_EMPR 
And      t1.CO_OPRC_CNTB = t2.CO_OPRC_CNTB 
And      t2.TI_SITU != 'DES' 
Group By t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO
Order By t1.CO_UNID_CNTB, t1.CO_OPRC_CNTB, t1.NU_ASTO
Open CU_TXMVTO_CNTB_I04_1
Fetch CU_TXMVTO_CNTB_I04_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO, @CNIM_DEBE,
    			      @CNIM_HABE, @CSSI_MVTO_CNTB
While @@Fetch_status = 0
Begin
Select @VNTO_SALD = @CNIM_DEBE - @CNIM_HABE
If ( ABS(ROUND(@VNTO_SALD,2)) <= @INNU_FACT And ABS(ROUND(@VNTO_SALD,2)) > 0.00 )
Begin
Select 	@VDFE_ASTO_CNTB = MAX(FE_ASTO_CNTB), @VNNU_SECU  = MAX(NU_SECU) + 1
From	TXMVTO_CNTB 
Where	
CO_EMPR 	= @ISCO_EMPR 	And
NU_CNTB_EMPR 	= @INNU_CNTB_EMPR And
CO_UNID_CNTB 	= @CSCO_UNID_CNTB And
CO_OPRC_CNTB 	= @CSCO_OPRC_CNTB And
NU_ANNO 	= @INNU_ANNO 	And
NU_MESE 	= @INNU_MESE 	And
NU_ASTO 	= @CSNU_ASTO

/*-------------- CASO 1 GANANCIA - ---------------*/
If ROUND(@VNTO_SALD,2) > 0.00
Begin
 Select @VSST_CNTA_NATU = ST_CNTA_NATU
    from TMPLAN_EMPR
  where CO_EMPR = @ISCO_EMPR 
   and CO_CNTA_EMPR = @VSCO_CNTA_GANA
   And NU_ANNO = 9999

 if @VSST_CNTA_NATU = 'COM'
   Select @VNFA_CAMB_DIAR = FA_CMPR_OFIC
     from TCFACT_CAMB
    where CO_MONE != @VSCO_MONE_CNTB 
     and FE_CAMB = @VDFE_ASTO_CNTB
 Else
  Select @VNFA_CAMB_DIAR = FA_VNTA_OFIC
     from TCFACT_CAMB
    where CO_MONE != @VSCO_MONE_CNTB 
     and FE_CAMB = @VDFE_ASTO_CNTB
  
 if @VNFA_CAMB_DIAR IS NULL 
  Select @VNFA_CAMB_DIAR = 1.000000
Insert Into TXMVTO_CNTB
(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB,
 NU_ANNO, NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB,
 CO_CNTA_EMPR, TI_AUXI_EMPR, CO_AUXI_EMPR, TI_DOCU,
 NU_DOCU, FE_DOCU, TI_CAMB, CO_MONE, FA_CAMB, TI_OPER, IM_MVTO_ORIG, 
 IM_MVTO_CNTB, DE_GLOS, SI_MVTO_CNTB, FE_DOCU_VENC, FA_CAMB_DIAR, 
 FE_DOCU_REFE, NU_PROC, NU_PROC_SECU, ST_GEST, ST_REDO, CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI,CO_ORDE_SERV )
Values ( @ISCO_EMPR, @INNU_CNTB_EMPR, @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @INNU_ANNO, @INNU_MESE, 
 @CSNU_ASTO, @VNNU_SECU, @VDFE_ASTO_CNTB, @VSCO_CNTA_GANA, @VSTI_AUXI_REGA, @VSCO_AUXI_REGA,
 NULL, NULL, NULL, 'PAC', @VSCO_MONE_CNTB, 1.000000, 'ABO', 0.00, ABS(@VNTO_SALD),
 'AJUSTE POR REDONDEO', @CSSI_MVTO_CNTB, NULL, @VNFA_CAMB_DIAR, NULL, @INNU_PROC, NULL, 'N', 'S',
 @ISCO_USUA, @IDFE_USUA, @ISCO_USUA, @IDFE_USUA,NullIf(Rtrim(@VSCO_ORDE_REGA),''))

If @@ERROR != 0
Begin 
Close CU_TXMVTO_CNTB_I04_1
Deallocate CU_TXMVTO_CNTB_I04_1
Rollback Transaction SP_TXMVTO_CNTB_I39
Return
End
End	
/*-------------- CASO 2 PERDIDA ---------------*/

Else If ROUND(@VNTO_SALD,2) < 0.00
Begin
 Select @VSST_CNTA_NATU = ST_CNTA_NATU
    from TMPLAN_EMPR
  where CO_EMPR = @ISCO_EMPR 
   and CO_CNTA_EMPR = @VSCO_CNTA_PERD
   And NU_ANNO = 9999

--   And NU_ANNO = @INNU_ANNO
 if @VSST_CNTA_NATU = 'COM'
   Select @VNFA_CAMB_DIAR = FA_CMPR_OFIC
     from TCFACT_CAMB
    where CO_MONE != @VSCO_MONE_CNTB 
     and FE_CAMB = @VDFE_ASTO_CNTB
 Else
  Select @VNFA_CAMB_DIAR = FA_VNTA_OFIC
     from TCFACT_CAMB
    where CO_MONE != @VSCO_MONE_CNTB 
     and FE_CAMB = @VDFE_ASTO_CNTB
  
 if @VNFA_CAMB_DIAR IS NULL 
  Select @VNFA_CAMB_DIAR = 1.000000
Insert Into TXMVTO_CNTB(CO_EMPR, NU_CNTB_EMPR, CO_UNID_CNTB, CO_OPRC_CNTB, 
 NU_ANNO, NU_MESE, NU_ASTO, NU_SECU, FE_ASTO_CNTB,CO_CNTA_EMPR, TI_AUXI_EMPR, 
 CO_AUXI_EMPR, TI_DOCU,NU_DOCU, FE_DOCU, TI_CAMB, CO_MONE, FA_CAMB, 
 TI_OPER, IM_MVTO_ORIG, IM_MVTO_CNTB, DE_GLOS,
 SI_MVTO_CNTB, FE_DOCU_VENC, FA_CAMB_DIAR, FE_DOCU_REFE, NU_PROC, NU_PROC_SECU, ST_GEST, ST_REDO,
 CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI,CO_ORDE_SERV)
Values ( @ISCO_EMPR, @INNU_CNTB_EMPR, @CSCO_UNID_CNTB, 
 @CSCO_OPRC_CNTB, @INNU_ANNO, @INNU_MESE, @CSNU_ASTO, @VNNU_SECU, 
 @VDFE_ASTO_CNTB, @VSCO_CNTA_PERD, @VSTI_AUXI_REPE, @VSCO_AUXI_REPE, NULL, NULL,
 NULL, 'PAC', @VSCO_MONE_CNTB, 1.000000, 'CAR', 0.00, ABS(@VNTO_SALD),'AJUSTE POR REDONDEO', 
 @CSSI_MVTO_CNTB, NULL, @VNFA_CAMB_DIAR, NULL, @INNU_PROC, NULL, 'N', 'S', 
 @ISCO_USUA, @IDFE_USUA, @ISCO_USUA, @IDFE_USUA,NullIf(Rtrim(@VSCO_ORDE_REPE),''))
If @@ERROR != 0     
   Begin 
     Close CU_TXMVTO_CNTB_I04_1
     Deallocate CU_TXMVTO_CNTB_I04_1 
     Rollback Transaction SP_TXMVTO_CNTB_I39
     Return
   End
End
End
Fetch CU_TXMVTO_CNTB_I04_1 Into @CSCO_UNID_CNTB, @CSCO_OPRC_CNTB, @CSNU_ASTO, @CNIM_DEBE,
    			      @CNIM_HABE, @CSSI_MVTO_CNTB
End
Close CU_TXMVTO_CNTB_I04_1
Deallocate CU_TXMVTO_CNTB_I04_1 
Commit Transaction SP_TXMVTO_CNTB_I39
Return
/*----------------------------------- Fin -------------------------------------*/








GO
